package com.itheima.d4_byte_stream;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

/**
 * 目标：掌握文件字节输出流FileOutputStream的使用。
 *
 * FileOutputStream(文件字节输出流)
 * 作用：以内存为基准，把内存中的数据以字节的形式写出到文件中去。
 *
 * 构造器                                                          说明
 * public FileOutputStream(File file)                       创建字节输出流管道与源文件对象接通
 * public FileOutputStream(String filepath)                 创建字节输出流管道与源文件路径接通
 * public FileOutputStream(File file，boolean append)       创建字节输出流管道与源文件对象接通，可追加数据
 * public FileOutputStream(String filepath，boolean append) 创建字节输出流管道与源文件路径接通，可追加数据
 *
 *  方法
 * public void write(int a)             写一个字节出去
 * public void write(byte[] buffer)     写一个字节数组出去
 * public void write(byte[] buffer , int pos , int len)     写一个字节数组的一部分出去。
 * public void close() throws IOException   关闭流。
 *
 */
public class FileOutputStreamTest4 {
    public static void main(String[] args) throws Exception {
        // 1、创建一个字节输出流管道与目标文件接通。和文件字节输入流一样的多态写法，用输出流的父类去接
        // 覆盖管道：覆盖之前的数据
        //OutputStream os = new FileOutputStream("Day08File-Io-App\\src\\itheima04out.txt");
        //使用相对路径最终是把结果写到了这个地址："D:\Idea\IntelliJIDEA2023.3.2\Code\javaseProMax\Day08File-Io-App\src\itheima04out.txt"，但是不显示在idea的列表，重启软件就好了
        //那我用绝对路径
        //OutputStream os = new FileOutputStream("D:\\Idea\\IntelliJIDEA2023.3.2\\Code\\javaseProMax\\Day08File-Io-App\\src\\itheima05out.txt");


        //注意：每次执行写字节操作时，会把目标位置处文件里面的内容清空掉，然后把内容写进去。
        // 我不要清空原来的内容，而是在有内容的基础上继续写字节数据，也就是追加数据的管道
        OutputStream os = new FileOutputStream("Day08File-Io-App\\src\\itheima05out.txt", true);

        // 2、开始写字节数据出去了
        os.write(97); // 97就是一个字节，代表a
        os.write('b'); // 'b'也是一个字节，并且也可以当做整数使用，底层的编号是98
        os.write('磊'); //目前编码是UTF-8，所以汉字是由三个字节组成的，[ooo] 默认只能写出去一个字节

        // byte[] getBytes()   使用平台的默认字符集将该 String编码为一系列字节，将结果存储到新的字节数组中
        // byte[] getBytes(String charsetName)       使用指定的字符集将该 String编码为一系列字节，将结果存储到新的字节数组中
        byte[] bytes = "我爱你中国abc".getBytes();
        os.write(bytes);
        os.write(bytes, 0, 15);


        // 换行符，\n可能只能在Windows系统上面换行，而\r\n在各种系统上面都是支持换行
        os.write("\r\n".getBytes());        //把字符串编码成为字节

        os.close(); // 关闭流

        System.out.println("---------------------整套视频已学完，回过头来自己试一试-----------------");
        OutputStream Zos = new FileOutputStream("Day08File-Io-App\\src\\ZengJiHong.txt",true);
        Zos.write('曾');
        Zos.write("我爱你".getBytes());
        Zos.write("\r\n".getBytes(StandardCharsets.UTF_8));
        Zos.close();

    }
}
